/*
 * BSharpIndexStrategy.cpp
 *
 *  Created on: 03/10/2009
 *      Author: nik0l4z
 */

#include "../Strategies/Index/BSharpIndexStrategy.h"

BSharpIndexStrategy::BSharpIndexStrategy(const string& nombrearch, int tamanioNodo) {


	const string sufijotabla="INDICEBSHARP.txt";

	this->nombreArchivo = nombrearch + sufijotabla;
	this->bSharpTree= new BsharpTree(nombrearch, tamanioNodo);
	this->tamanioNodo = tamanioNodo;

	Deserializar();
}

BSharpIndexStrategy::BSharpIndexStrategy() {
	// TODO Auto-generated destructor stub
}


BSharpIndexStrategy::~BSharpIndexStrategy() {
	delete this->bSharpTree;
}

void BSharpIndexStrategy::saludar()
{
		cout << "Soy una estrategia indice bsharp "<< endl;
}

bool BSharpIndexStrategy::checkUniqueness(Clave *clave, Dato *dato){
    //Harcodeo dado que el B# no se llego a terminar
//	return (bSharpTree->buscar(clave) != NULL);
	return false;
}

void BSharpIndexStrategy::updateIndex(int fileReference,Clave*clave, Dato* dato){
//Comentado ya q no se llego con el B#
	clave->setReferencia(fileReference);
	bSharpTree->insertar(clave);
}

int BSharpIndexStrategy::getStorageReferenceByKey(Clave *clave){
	return bSharpTree->buscar(clave)->getReferencia();
}

int BSharpIndexStrategy::deleteKey(Clave *clave){
	if(bSharpTree->eliminar(clave))
		return 1;
	else
		return 0;
}

int BSharpIndexStrategy::verificarUnicidad(Clave* clave)
{
	if (bSharpTree->buscar(clave) == NULL)
		return 1;
	else
		return 0;
}

bool BSharpIndexStrategy::eliminar(Clave* clave){

	if (verificarUnicidad(clave) == 0){
		return bSharpTree->eliminar(clave);
	}

	return false;
}

Clave* BSharpIndexStrategy::buscar(Clave* clave){

	return bSharpTree->buscar(clave);
}

//Devuelve false si claveVieja no se encuentra insertada en el arbol. En caso contrario, la reemplaza por claveNueva
//y devuelve true.
int BSharpIndexStrategy::modificar(Clave* claveVieja, Clave* claveNueva){

	return bSharpTree->modificar(claveVieja, claveNueva);
}

void BSharpIndexStrategy::Deserializar()
{
}

void BSharpIndexStrategy::Serializar()
{
}


/**
 * Workaround agregado, dado que las distintas estrategias de indexado comparten una misma interfaz, y su comportamiento no se el mismo
 * Problema de Arquitectura.
 */
int BSharpIndexStrategy::getClassName(){
	return BSharp;
}

Almacenamiento *BSharpIndexStrategy::getStorage() const{
	cout << "IndexStrategy::getStorage | A implementar!!!! " << endl;
	return NULL;
}

void BSharpIndexStrategy::setStorage(Almacenamiento* storage){
	cout << "IndexStrategy::setStorage | A implementar!!!! " << endl;
}

